"""
日志配置
使用 loguru 进行统一日志管理
"""
import sys
from pathlib import Path
from loguru import logger
from app.core.config import settings

# 移除默认的 handler
logger.remove()

# 日志目录
LOG_DIR = Path("logs")
LOG_DIR.mkdir(exist_ok=True)

# 日志格式
LOG_FORMAT = (
    "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
    "<level>{level: <8}</level> | "
    "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
    "<level>{message}</level>"
)

# 控制台输出（彩色）
logger.add(
    sys.stdout,
    format=LOG_FORMAT,
    level="INFO" if not settings.DEBUG else "DEBUG",
    colorize=True,
    backtrace=True,
    diagnose=True
)

# 文件输出 - 所有日志
logger.add(
    LOG_DIR / "app.log",
    format=LOG_FORMAT,
    level="DEBUG",
    rotation="500 MB",  # 文件大小达到 500MB 时轮换
    retention="30 days",  # 保留 30 天
    compression="zip",  # 压缩旧日志
    encoding="utf-8",
    backtrace=True,
    diagnose=True
)

# 文件输出 - 错误日志
logger.add(
    LOG_DIR / "error.log",
    format=LOG_FORMAT,
    level="ERROR",
    rotation="100 MB",
    retention="90 days",  # 错误日志保留更久
    compression="zip",
    encoding="utf-8",
    backtrace=True,
    diagnose=True
)

# 文件输出 - API 请求日志
logger.add(
    LOG_DIR / "api.log",
    format=LOG_FORMAT,
    level="INFO",
    rotation="200 MB",
    retention="7 days",
    compression="zip",
    encoding="utf-8",
    filter=lambda record: "API" in record["message"] or "api" in record["name"]
)


# 导出 logger
__all__ = ["logger"]

